#include<iostream>
#include<queue>
#include<vector>
#include<cstring>
using namespace std;
const int N = 1e4+5, M = 1e6+5, L = 55;
// n个单词，每个单词l个字符，即一共n*l个字符
int ch[N*L][26], cnt[N*L], ne[N*L], idx;
char word[N], str[M];
// 构建fail树
int fcnt[N*L];
vector<int> fail[N*L];

void insert(char* s){
    int p = 0;
    for(int i = 0; s[i]; i++){
        int j = s[i] - 'a';
        if(ch[p][j] == 0){
            ch[p][j] = ++idx;
        }
        p = ch[p][j];
    }
    cnt[p]++;
    // printf("cnt[%d]=%d\n", p, cnt[p]);
}

void build(){
    queue<int> q;
    // 将根节点的所有子节点入队
    for(int i = 0; i < 26; i++){
        if(ch[0][i]) {
            q.push(ch[0][i]);
            fail[0].push_back(ch[0][i]);
        }
    }
    while(!q.empty()){
        int u = q.front(); q.pop();
        // 遍历t的所有子节点
        for(int i = 0; i < 26; i++){
            int v = ch[u][i];
            if(v){
                // 建立回跳边（四边形法则）
                ne[v] = ch[ne[u]][i];
                fail[ne[v]].push_back(v);
                q.push(v);
            }else{
                // 建立转移边（三角形法则）
                ch[u][i] = ch[ne[u]][i];
            }
        }
    }
}

void get_fail(char* s){
    for(int k = 0, i = 0; s[k]; k++){
        i = ch[i][s[k] - 'a'];
        fcnt[i]++;
    }
}

int dfs(int u){
    int ans = 0;
    // 终止节点才统计
    if(cnt[u]) ans += fcnt[u];
    for(int v : fail[u]){
        ans += dfs(v);
    }
    return ans;
}

// 出了问题，哪里错了?
int main(){
    int t, n;
    cin >> t;
    while(t--){
        memset(ch, 0, sizeof ch);
        memset(cnt, 0,sizeof cnt);
        memset(ne, 0, sizeof ne);
        memset(fcnt, 0, sizeof fcnt);
        for (int i = 0; i <= idx; i++) fail[i].clear();
        idx = 0;
        cin >> n;
        while(n--){
            cin >> word;
            insert(word);   
        }
        cin >> str;
        build();
        get_fail(str);
        for(int i = 0; i <= idx; i++){
            printf("fail[%d]=", i);
            for(auto u : fail[i]) printf("%d ", u);
            printf("\n");
        }
        for(int i = 0; i <= idx; i++){
            printf("fcnt[%d]=%d\n", i, fcnt[i]);
        }
        cout << dfs(0) << endl;
    }
}

// 1
// 5
// aa
// aab
// abc
// bcd
// c
// aabcdc